struct exec_domain *ed, full_execution_context_t *c)
{
int i;
- unsigned long vmx_domain = ed->arch.arch_vmx.flags;
+#ifdef __i386__ /* Remove when x86_64 VMX is implemented */
+ unsigned long vmx_domain;
extern void save_vmx_execution_context(execution_context_t *);
+#endif
c->flags = 0;
memcpy(&c->cpu_ctxt,
&ed->arch.user_ctxt,
sizeof(ed->arch.user_ctxt));
+#ifdef __i386__
+ vmx_domain = ed->arch.arch_vmx.flags;
if (vmx_domain)
save_vmx_execution_context(&c->cpu_ctxt);
+#endif
if ( test_bit(EDF_DONEFPUINIT, &ed->ed_flags) )
c->flags |= ECF_I387_VALID;
print_buf[index++] = c;
}
+void save_vmx_execution_context(execution_context_t *ctxt)
+{
+ __vmread(GUEST_SS_SELECTOR, &ctxt->ss);
+ __vmread(GUEST_ESP, &ctxt->esp);
+ __vmread(GUEST_EFLAGS, &ctxt->eflags);
+ __vmread(GUEST_CS_SELECTOR, &ctxt->cs);
+ __vmread(GUEST_EIP, &ctxt->eip);
+
+ __vmread(GUEST_GS_SELECTOR, &ctxt->gs);
+ __vmread(GUEST_FS_SELECTOR, &ctxt->fs);
+ __vmread(GUEST_ES_SELECTOR, &ctxt->es);
+ __vmread(GUEST_DS_SELECTOR, &ctxt->ds);
+}
+
#ifdef XEN_DEBUGGER
void save_xen_regs(struct xen_regs *regs)
{